#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#include "huffman.h"

void lelinha() {
   int c;
   do { c=getchar(); } while (c!='\n');
}

int main() {
   /* ----------------------------------------------------------------------
      Declaracoes e inicio para verificacao do uso da memoria dinamica
      ---------------------------------------------------------------------- */
   struct mallinfo info = mallinfo();
   int MemDinInicial = info.uordblks, MemDinFinal;
   /* ---------------------------------------------------------------------- */
   char comando[100];
   char nomearq[200];

   while ( scanf("%s", comando) > 0 ) {
      if ( strcmp(comando,"tabela") == 0 ) {

	 scanf(" %[^\n]", nomearq); lelinha();
	 imprime_tabela_arquivo(nomearq);

      } else if ( strcmp(comando, "codificar") == 0 ) {

	 scanf(" %[^\n]", nomearq); lelinha();
	 codifica_arquivo(nomearq);

      } else if ( strcmp(comando, "compactar") == 0 ) {

	 scanf(" %[^\n]", nomearq); lelinha();
	 compacta_arquivo(nomearq);

      } else if ( strcmp(comando, "descomprimir") == 0 ) {

	 scanf(" %[^\n]", nomearq); lelinha();
	 descomprime_arquivo(nomearq);

      } else if ( strcmp(comando, "sair") == 0 ) {

	 break;

      } else {

	 printf("Comando desconhecido: %s\n", comando);

      }
   }


   /* --------------------------------------------------------------------- */
   /* Verificacao final do uso da memoria dinamica                          */
   /* --------------------------------------------------------------------- */
   info = mallinfo();
   MemDinFinal = info.uordblks;
   if (MemDinInicial!=MemDinFinal)
      printf("\n\nMemoria dinamica nao foi totalmente liberada (%d, %d)\n",
	     MemDinInicial,MemDinFinal);
   /* --------------------------------------------------------------------- */
   return 0;
}
